<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ALL</title>
</head>

<body>

</body>
<script src="ajax.js"></script>
<script>


    // promise.all()中的参数是异步执行的。
    // let p1 = new Promise((resolve, reject) => {
    //     resolve("promise1 " + new Date().toLocaleString())
    // })
    // let p2 = new Promise((resolve, reject) => {
    //     setTimeout(() => {
    //         resolve("promise2 " + new Date().toLocaleString())
    //     }, 4000);
    // })
    // let p3 = new Promise((resolve, reject) => {
    //     setTimeout(() => {
    //         resolve("promise3 " + new Date().toLocaleString())
    //     }, 2000);
    // })
    // var ps = [p1, p2, p3]
    // Promise.all(ps)
    //     .then(value => {
    //         console.log(value)
    //     })


    // ajax 请求url相同的情况下，会等上一次请求处理完成后再次发送新的请求
    // console.log("开始时间: " + new Date().toLocaleString())
    // let p1 = new Promise((resolve, reject) => {
    //     resolve("promise1 " + new Date().toLocaleString())
    // })
    // let p2 = new Promise((resolve, reject) => {
       
    //     setTimeout(() => {
    //      var u2 =    ajax(`http:127.0.0.1:7777/js/userInfo?name=test`,"u2").then(user => {
    //         return new Promise(resolve => {
    //             resolve(user)
    //         })
    //     }) 
    //     }, 2000);
        
    //     // resolve(u2)
    //     // resolve("promise2 " + new Date().toLocaleString())

    // })
    // let p3 = new Promise((resolve, reject) => {
    //     let u3 = ajax(`http:127.0.0.1:7777/js/userInfo?name=test`,"u3").then(user => {
    //         return new Promise(resolve => {
    //             resolve(user)
    //         })
    //     })
    //     // resolve(u3)
    // })


    // var ps = [p1, p2, p3]
    // p1.then(res=>console.log(new Date().toLocaleString()))
    // p2.then(res=>console.log(new Date().toLocaleString()))
    // p3.then(res=>console.log(new Date().toLocaleString()))

    // Promise.all(ps)
    //     .then(value => {
    //         console.log(value)
    //         console.log("结束时间: " + new Date().toLocaleString())

    //     })









    //买作业本
    // function cutUp() {
    //     console.log('挑作业本');
    //     var p = new Promise(function (resolve, reject) {
    //         //做一些异步操作 
    //         setTimeout(function () {
    //             console.log('挑好购买作业本');
    //             resolve('新的作业本');
    //         }, 1000);
    //     });
    //     return p;
    // }
    //买笔 
    // function boil() {
    //     console.log('挑笔芯');
    //     var p = new Promise(function (resolve, reject) {
    //         //做一些异步操作 
    //         setTimeout(function () {
    //             console.log('挑好购买笔芯');
    //             // resolve('新的笔芯');
    //             reject("钱不够")
    //         }, 1000);
    //     })
    //     // .catch(a=>console.log(a))
    //     return p;
    // }

    // Promise.all([cutUp(), boil()])
    //     .then(function (results) {
    //         console.log("写作业的工具都买好了");
    //         console.log(results);
    //     })
    //     .catch(reason => console.log("err: ", reason))

    // all并行执行异步操作，在所有异步操作完成后才执行回调。
    // 接收到错误处理后，如果该promise对该错误进行了处理，则all中会有undefined，如果promise没有处理，则会在all.catch中进行处理。如果都没有处理则会报uncaught错误。




    // promise.all根据需求封装成函数 函数版的promise.all访问后台
    function getUsers(names) {
        console.log("函数开始执行时间:" + new Date().toLocaleString())
        // console.log(names)

        let promises = names.map(name => {
            // console.log(new Date().toLocaleString())
            return ajax(`http://localhost:7777/js/userInfo?name=${name}`)
        })
        return Promise.all(promises)
    }

    getUsers(["test", "test2"]).then(users => {
        console.log(users)
        console.log("函数执行完毕时间:" + new Date().toLocaleString())
    })



    // 直接使用的promise.all
    // const promises = ["test", "test"].map(name => {
    //     return ajax(`http://localhost:7001/js/userInfo?name=${name}`)
    // })
    // setTimeout(() => {
    //     console.log(promises)
    // }, 5000);

    // console.log("开始时间: "+new Date().toLocaleString())
    // Promise.all(promises)
    //     .then(value => {
    //         console.log(value)
    //         console.log("结束时间: "+new Date().toLocaleString())
    //     })
    //     .catch(err => {
    //         console.log(err)
    //     })


</script>

</html>